// import store from '@/store'
import axios from 'axios'
import { Toast } from 'vant'
import Router from '@/router'
import store from '@/store'
// import { Toast } from 'vant'

// 创建 axios 实例，将来对创建出来的实例，进行自定义配置
// 好处：不会污染原始的 axios 实例
const instance = axios.create({
  baseURL: 'http://cba.itlike.com/public/index.php?s=/api/',
  timeout: 5000
})

// 自定义配置 - 请求/响应 拦截器
// 添加请求拦截器
instance.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  // 开启loading，禁止背景点击 (节流处理，防止多次无效触发)
  Toast.loading({
    message: '加载中...',
    forbidClick: true,
    loadingType: 'spinner',
    duration: 0
  })

  // 只要有token，就在请求时携带，便于请求需要授权的接口
  const token = store.getters.token
  if (token) {
    config.headers['Access-Token'] = token
    config.headers.platform = 'H5'
  }

  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
  // 2xx 范围内的状态码都会触发该函数。
  // 对响应数据做点什么 (默认axios会多包装一层data，需要响应拦截器中处理一下)
  const res = response.data
  if (res.status !== 200) {
    console.log(res)
    if (res.status === 500) {
      Toast('网络异常，请稍后重试')
      return Promise.reject(res.message)
    } else if (res.status === 401) {
      // 登录接口，只有用户登录的场景，token过期就需要用户显式登录
      // location.hash = '/login'
      console.log(location)
      Router.replace({
        path: '/login',
        query: { redirectUrl: location.href }
      })
      // console.log(url)
      // location.replace(location.)

      // Dialog.confirm({
      //   title: '标题',
      //   message: '弹窗内容'
      // }).then(() => {
      //   // on confirm
      //   console.log('确认')
      //   // Dialog.close()
      // }).catch(() => {
      //   // on cancel
      //   console.log('取消')
      //   // Dialog.close()
      // })
      // 避免下面返回 Promise异常，导致业务界面控制台报错，以成功返回本次请求
      // return Promise.resolve()

      Toast(res.message)
      return Promise.reject(res.message)

      // 登录接口，支持静默刷新的场景（token + refresh_token）
      // if (response.config.url === '/refresh') {
      // //  如果当前请求是静默登录，并且返回403，此时一般有【两种处理方式】
      // //  1. 直接跳转登录页
      // //   location.hash = '/login'
      // //  2. 给一个弹窗，提示未登录，让用户自己选择是否需要去登录或者继续浏览商品
      // //  这里返回特定状态，业务页面上根据这个标识进行弹窗
      //   // return Promise.reject({code: 50001})
      // } else {
      //   // 不是静默登录，则刷新token，再次发起业务请求
      //   //  1. 静默登录（刷新token）
      //   //  instance.post('/refresh', {refreshToken: xxxx})
      //   //  2. 重新发起业务请求(请求参数为初次响应的 response.config)
      //   //  instance.request(response.config)
      // }
    }
    Toast(res.message)
    return Promise.reject(res.message)
  }
  Toast.clear()
  return res.data
}, function (error) {
  // 超出 2xx 范围的状态码都会触发该函数。
  // 对响应错误做点什么
  return Promise.reject(error)
})

// 导出配置好的实例
export { instance }
